Set up

suppressPackageStartupMessages({
  library(tidyverse)
})

Directories and File Inputs/Outputs

# Detect the ".git" folder -- this will be in the project root directory
# Use this as the root directory to ensure proper sourcing of functions 
# no matter where this is called from
root_dir <- rprojroot::find_root(rprojroot::has_dir(".git"))
analysis_dir <- file.path(root_dir, "analyses", "tmb-vaf-longitudinal")
results_dir <- file.path(analysis_dir, "results")
input_dir <- file.path(analysis_dir, "input")
files_dir <- file.path(root_dir, "analyses", "sample-distribution-analysis", "results")

# Input files for the paired longitudinal (PL) cohort
pbta_file <- file.path(files_dir, "pbta.tsv") # file from add-sample-distribution module
genomic_paired_file <- file.path(files_dir, "genomic_assays_matched_time_points.tsv")
tmb_vaf_file <- file.path(results_dir, "tmb_vaf_genomic.tsv")
palette_file <- file.path(root_dir, "figures", "palettes", "oncoprint_color_palette.tsv")


# Input files for the PBTA cohort
maf_file <- file.path(results_dir, "maf.tsv")
tmb_file <- file.path(input_dir, "snv-mutation-tmb-coding.tsv")


# File path to PL plot directory
PL_plots_dir <-
  file.path(analysis_dir, "plots", "Alteration_type_barplots_PL")
if (!dir.exists(PL_plots_dir)) {
  dir.create(PL_plots_dir)
}

# File path to kids_PL_plots directory
kids_PL_plots_dir <-
  file.path(PL_plots_dir, "kids_PL_plots")
if (!dir.exists(kids_PL_plots_dir)) {
  dir.create(kids_PL_plots_dir)
}

# File path to kids_molecular_subtype_PL_plots_dir directory
kids_molecular_subtype_PL_plots_dir <-
  file.path(PL_plots_dir, "kids_molecular_subtype_PL_plots")
if (!dir.exists(kids_molecular_subtype_PL_plots_dir)) {
  dir.create(kids_molecular_subtype_PL_plots_dir)
}


# File path to molecular_subtype_PL_plots directory
molecular_subtype_PL_plots_dir <-
  file.path(PL_plots_dir, "molecular_subtype_PL_plots")
if (!dir.exists(molecular_subtype_PL_plots_dir)) {
  dir.create(molecular_subtype_PL_plots_dir)
}

# File path to PBTA plot directory
PBTA_plots_dir <-
  file.path(analysis_dir, "plots", "Alteration_type_barplots_PBTA")
if (!dir.exists(PBTA_plots_dir)) {
  dir.create(PBTA_plots_dir)
}


# File path to molecular_subtype_PBTA_plots directory
molecular_subtype_PBTA_plots_dir <-
  file.path(PBTA_plots_dir, "molecular_subtype_PBTA_plots")
if (!dir.exists(molecular_subtype_PBTA_plots_dir)) {
  dir.create(molecular_subtype_PBTA_plots_dir)
}

source(paste0(root_dir, "/figures/scripts/theme.R"))
source(paste0(analysis_dir, "/util/function-create-barplot.R"))

Read in data and process

# Vector to order timepoints
timepoints_order <- c("Diagnosis", "Progressive", "Recurrence", "Deceased", "Second Malignancy", "Unavailable", "Metastatic", "Residual")
timepoints_order_abbrev <- c("Dx", "Pro", "Rec", "Dec", "SM", "Unavail", "Metastatic", "Residual")

# Vector to order Variant_Classification
variants_order <- c("Frame_Shift_Del", "Frame_Shift_Ins", "In_Frame_Del", 
                    "In_Frame_Ins", "Missense_Mutation", "Nonsense_Mutation", 
                    "Nonstop_Mutation", "Splice_Site", "Translation_Start_Site")

PL cohort

pbta_df <- readr::read_tsv(pbta_file, guess_max = 100000, show_col_types = FALSE) %>% 
  select(Kids_First_Participant_ID, Kids_First_Biospecimen_ID, cg_multiple, cg_id, cgGFAC, tumor_descriptor, molecular_subtype) %>%  #plot_group
  mutate(tumor_descriptor_abbrev = case_when(grepl("Diagnosis", tumor_descriptor) ~ "Dx",
                               grepl("Progressive", tumor_descriptor) ~ "Pro",
                               grepl("Recurrence", tumor_descriptor) ~ "Rec",
                               grepl("Deceased", tumor_descriptor) ~ "Dec",
                               grepl("Second Malignancy", tumor_descriptor) ~ "SM",
                               grepl("Unavailable", tumor_descriptor) ~ "Unavail",
                              TRUE ~ tumor_descriptor),
         molecular_subtype = str_replace(molecular_subtype, ",", ""),
         molecular_subtype_edited = str_replace(molecular_subtype, "^\\S* ", ""),
         
         # create unique identifier for timepoint and molecular subtype
         td_ms_plot_group = paste(tumor_descriptor_abbrev, molecular_subtype_edited, sep = ":")) 
  

# This includes non synonymous mutations as described in the `01-preporcess-data.Rmd`
tmb_vaf_df <- readr::read_tsv(tmb_vaf_file, guess_max = 100000, show_col_types = FALSE) %>% 
  filter(!tmb >= 10) %>% 
  select(Kids_First_Biospecimen_ID, Variant_Classification, gene_protein, mutation_count,   region_size, tmb, VAF) %>% 
  filter(!is.na(Variant_Classification))

# List with patients with paired longitudinal genomic specimens
genomic_paired_df <- readr::read_tsv(genomic_paired_file, guess_max = 100000, show_col_types = FALSE) %>%
  left_join(pbta_df, by = c("Kids_First_Participant_ID")) %>% 
  left_join(tmb_vaf_df, by = c("Kids_First_Biospecimen_ID")) %>%
  filter(!is.na(tmb))

# Number of patients with TMB information
no_samples_with_tmb <- print(length(unique(genomic_paired_df$Kids_First_Participant_ID)))
[1] 116
# Attention as some bs specimen might not have TMB.
# If that happens, we will end up with samples lacking timepoints.
# Let's identify these samples and remove them.
PL_df <- genomic_paired_df %>%
  select(Kids_First_Participant_ID, tumor_descriptor) %>% 
  unique() %>%
  arrange(Kids_First_Participant_ID, tumor_descriptor) %>%
  group_by(Kids_First_Participant_ID) %>%
  summarize(tumor_descriptor_sum = str_c(tumor_descriptor, collapse = ";")) %>%
  filter(!tumor_descriptor_sum %in% c("Diagnosis", "Progressive", "Recurrence", "Second Malignancy", "Unavailable", "Deceased", "Progressive;Progressive")) %>%
  left_join(genomic_paired_df, by = c("Kids_First_Participant_ID")) %>%
  filter(!cg_id == "NA",
         !tumor_descriptor == "Not Reported") %>% 
  mutate(match_id = paste(tumor_descriptor, Kids_First_Participant_ID, sep = "_"),
         cg_id = str_replace(cg_id, c("/|-"), " "))
  
# Let's summarize td_ms_plot_group and use this for visualization purposes
PL_td_ms_plot_group_n_df <- PL_df %>% 
  dplyr::count(cg_id, td_ms_plot_group) %>% 
  dplyr::mutate(td_ms_plot_group_n = glue::glue("{td_ms_plot_group} (N={n})")) %>% 
  dplyr::rename(td_ms_plot_group_number = n)

# Let's summarize tumor_descriptor and use this for visualization purposes
PL_td_plot_group_n_df <- PL_df %>% 
  dplyr::count(cg_id, tumor_descriptor) %>% 
  dplyr::mutate(td_plot_group_n = glue::glue("{tumor_descriptor} (N={n})")) %>% 
  dplyr::rename(td_plot_group_number = n)

# Let's count number of samples 
PL_count_df <- PL_df %>%
  left_join(PL_td_ms_plot_group_n_df) %>%
  left_join(PL_td_plot_group_n_df) %>%
  filter(!is.na(Variant_Classification)) %>% 
  # remove if total #samples per timepoint is less than 2
  #filter(!td_ms_plot_group_number <= 2) %>% 
  group_by(tumor_descriptor, td_ms_plot_group, cg_id, molecular_subtype, Kids_First_Participant_ID, match_id, Variant_Classification, td_ms_plot_group_n, td_plot_group_n) %>% 
  dplyr::count(Kids_First_Participant_ID) %>% 
  mutate(tumor_descriptor = factor(tumor_descriptor),
         tumor_descriptor = fct_relevel(tumor_descriptor, timepoints_order),
         Variant_Classification = factor(Variant_Classification),
         Variant_Classification = fct_relevel(Variant_Classification, variants_order)) %>% 
  arrange(tumor_descriptor, Variant_Classification, desc(molecular_subtype)) 
Joining with `by = join_by(cg_id, td_ms_plot_group)`Joining with `by = join_by(cg_id, tumor_descriptor)`Warning: There were 945 warnings in `mutate()`.
The first warning was:
ℹ In argument: `tumor_descriptor = fct_relevel(tumor_descriptor, timepoints_order)`.
ℹ In group 1: `tumor_descriptor = "Deceased"`, `td_ms_plot_group = "Dec:ADAM"`, `cg_id = "Adamantinomatous Craniopharyngioma"`, `molecular_subtype =
  "CRANIO ADAM"`, `Kids_First_Participant_ID = "PT_WYXTEG3E"`, `match_id = "Deceased_PT_WYXTEG3E"`, `Variant_Classification = "Frame_Shift_Del"`,
  `td_ms_plot_group_n = "Dec:ADAM (N=21)"`, `td_plot_group_n = "Deceased (N=21)"`.
Caused by warning:
! 3 unknown levels in `f`: Unavailable, Metastatic, and Residual
ℹ Run ]8;;ide:run:dplyr::last_dplyr_warnings()dplyr::last_dplyr_warnings()]8;; to see the 944 remaining warnings.
# Number of patients with TMB information and paired timepoints
no_samples <- print(length(unique(PL_count_df$Kids_First_Participant_ID)))
[1] 107

PBTA cohort

tmb_df <- readr::read_tsv(tmb_file, guess_max = 100000, show_col_types = FALSE) %>% 
  dplyr::rename(Kids_First_Biospecimen_ID = Tumor_Sample_Barcode) # change name of the biospecimen to match the one from the histologies files

tmb_vaf_df <- readr::read_tsv(maf_file, guess_max = 100000, show_col_types = FALSE) %>%
  left_join(tmb_df, by = c("Kids_First_Biospecimen_ID")) %>% 
  filter(!tmb >= 10,
         !is.na(tmb)) 

PBTA_df <- pbta_df %>% 
  left_join(tmb_vaf_df, by = c("Kids_First_Biospecimen_ID")) %>% 
  filter(!cg_id == "NA",
         !tumor_descriptor == "Not Reported",
         !is.na(Variant_Classification)) %>% 
  mutate(match_id = paste(tumor_descriptor, Kids_First_Participant_ID, sep = "_"),
         cg_id = str_replace(cg_id, c("/|-"), " "))

# Number of patients with TMB information
no_samples <- print(length(unique(PBTA_df$Kids_First_Participant_ID)))
[1] 1850
# Let's summarize tumor_descriptor and use this for visualization purposes
PBTA_td_plot_group_n_df <- PBTA_df %>% 
  dplyr::count(cg_id, tumor_descriptor) %>% 
  dplyr::mutate(td_plot_group_n = glue::glue("{tumor_descriptor} (N={n})")) %>% 
  dplyr::rename(td_plot_group_number = n)

# Let's count number of samples 
PBTA_count_df <- PBTA_df %>% 
  left_join(PBTA_td_plot_group_n_df, by = join_by("cg_id", "tumor_descriptor")) %>% 
  filter(!is.na(Variant_Classification)) %>% 
  group_by(tumor_descriptor, cg_id, molecular_subtype, Kids_First_Participant_ID, match_id, Variant_Classification, td_plot_group_n) %>% 
  dplyr::count(Kids_First_Participant_ID) %>% 
  mutate(tumor_descriptor = factor(tumor_descriptor),
         tumor_descriptor = fct_relevel(tumor_descriptor, timepoints_order),
         Variant_Classification = factor(Variant_Classification),
         Variant_Classification = fct_relevel(Variant_Classification, variants_order)) %>% 
  arrange(tumor_descriptor, Variant_Classification, desc(molecular_subtype)) 
Warning: There were 6564 warnings in `mutate()`.
The first warning was:
ℹ In argument: `tumor_descriptor = fct_relevel(tumor_descriptor, timepoints_order)`.
ℹ In group 1: `tumor_descriptor = "Deceased"`, `cg_id = "Adamantinomatous Craniopharyngioma"`, `molecular_subtype = "CRANIO ADAM"`,
  `Kids_First_Participant_ID = "PT_WYXTEG3E"`, `match_id = "Deceased_PT_WYXTEG3E"`, `Variant_Classification = "Frame_Shift_Del"`, `td_plot_group_n =
  "Deceased (N=21)"`.
Caused by warning:
! 1 unknown level in `f`: Unavailable
ℹ Run ]8;;ide:run:dplyr::last_dplyr_warnings()dplyr::last_dplyr_warnings()]8;; to see the 6563 remaining warnings.

Define parameters for plots

# Read color palette
palette_df <- readr::read_tsv(palette_file, guess_max = 100000, show_col_types = FALSE) %>% 
  mutate(hex_codes = case_when(grepl("#000000", hex_codes) ~ "orange",
                               TRUE ~ hex_codes),
    color_names = factor(color_names),
         color_names = fct_relevel(color_names, variants_order)) %>% 
  arrange(color_names)

         
# Define and order palette
palette <- palette_df$hex_codes
names(palette) <- palette_df$color_names

Alterations per timepoint

PL cohort

# Define parameters for function
x_value <- PL_count_df$tumor_descriptor
title <- paste("Variant types in the paired longitudinal cohort", sep = " ")

# Run function
fname <- paste0(PL_plots_dir, "/", "Alteration_type_timepoints_barplots_PL.pdf")
print(fname)
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/Alteration_type_timepoints_barplots_PL.pdf"
p <- create_stacked_barplot_variant(df = PL_count_df, x = x_value, palette = palette, title = title)
pdf(file = fname, width = 6, height = 6)
print(p)
dev.off()
quartz_off_screen 
                2 

PBTA cohort

# Define parameters for function
x_value <- PBTA_count_df$tumor_descriptor
title <- paste("Variant types in the PBTA cohort", sep = " ")

# Run function
fname <- paste0(PBTA_plots_dir, "/", "Alteration_type_timepoints_barplots_PBTA.pdf")
print(fname)
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/Alteration_type_timepoints_barplots_PBTA.pdf"
p <- create_stacked_barplot_variant(df = PBTA_count_df, x = x_value, palette = palette, title = title)
pdf(file = fname, width = 6, height = 6)
print(p)
dev.off()
quartz_off_screen 
                2 

Alterations per timepoint in each cancer type

PL cohort

PL_panel_df <- PL_count_df %>% 
  mutate(cg_id = str_wrap(cg_id, 12)) # Edit to fit in the plot title for the panel

# Define parameters for function
x_value <- PL_panel_df$tumor_descriptor
title <- paste("Variant types across cancer groups in the paired longitudinal cohort", sep = " ")
rows <- 5

# Run function
fname <- paste0(PL_plots_dir, "/", "Alteration_type_timepoints_cg_id_barplots_PL.pdf")
print(fname)
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/Alteration_type_timepoints_cg_id_barplots_PL.pdf"
p <- create_stacked_barplot_variant_cg_id(df = PL_panel_df, x = x_value, palette = palette, title = title, rows = rows)
pdf(file = fname, width = 12, height = 15)
print(p)
dev.off()
quartz_off_screen 
                2 

PBTA cohort

PBTA_panel_df <- PBTA_count_df %>% 
  mutate(cg_id = str_wrap(cg_id, 12)) # Edit to fit in the plot title for the panel

# Define parameters for function
x_value <- PBTA_panel_df$tumor_descriptor
title <- paste("Variant types across cancer groups in the PBTA cohort", sep = " ")
rows <- 10

# Run function
fname <- paste0(PBTA_plots_dir, "/", "Alteration_type_timepoints_cg_id_barplots_PBTA.pdf")
print(fname)
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/Alteration_type_timepoints_cg_id_barplots_PBTA.pdf"
p <- create_stacked_barplot_variant_cg_id(df = PBTA_panel_df, x = x_value, palette = palette, title = title, rows = rows)
pdf(file = fname, width = 15, height = 28)
print(p)
dev.off()
quartz_off_screen 
                2 

Alterations per timepoint in each cancer type and molecular subtype

PL cohort

PL_panel_df <- PL_count_df %>% 
  mutate(cg_id = str_replace_all(cg_id, " ", "_"),
        # Edit to fit in the plot title for the panel
         molecular_subtype = str_wrap(molecular_subtype, 12)) 

sample <- as.character(unique(PL_panel_df$cg_id)) 
sample <- sort(sample, decreasing = FALSE)
sample
 [1] "Adamantinomatous_Craniopharyngioma"       "Atypical_Teratoid_Rhabdoid_Tumor"         "Chordoma"                                
 [4] "Choroid_plexus_carcinoma"                 "CNS_Embryonal_tumor"                      "Craniopharyngioma"                       
 [7] "Diffuse_midline_glioma"                   "Dysembryoplastic_neuroepithelial_tumor"   "Embryonal_tumor_with_multilayer_rosettes"
[10] "Ependymoma"                               "Ewing_sarcoma"                            "Ganglioglioma"                           
[13] "Glial_neuronal_tumor"                     "Hemangioblastoma"                         "High_grade_glioma"                       
[16] "Low_grade_glioma"                         "Malignant_peripheral_nerve_sheath_tumor"  "Medulloblastoma"                         
[19] "Meningioma"                               "Neuroblastoma"                            "Neurofibroma_Plexiform"                  
[22] "Pilocytic_astrocytoma"                    "Schwannoma"                              
# Loop through variable
for (i in seq_along(sample)){
  print(i)
  df_sub <- PL_panel_df %>%
    filter(cg_id == sample[i]) 
  
  if (i %in% c(10, 16)){
    width_value = 25
    }else{
    width_value = 10
    }
  
# Define parameters for function
x_value <- df_sub$td_plot_group_n
title <- paste(sample[i], "Variants across molecular subtypes", sep = ": ")
rows_value <- 1

# Run function
fname <- paste0(molecular_subtype_PL_plots_dir, "/", sample[i], "_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf")
print(fname)
p <- create_stacked_barplot_variant_molecular_subtype(df = df_sub, x = x_value, palette = palette, title = title, rows = rows_value)
pdf(file = fname, width = width_value, height = 6)
print(p)
dev.off()
}
[1] 1
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Adamantinomatous_Craniopharyngioma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 2
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Atypical_Teratoid_Rhabdoid_Tumor_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 3
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Chordoma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 4
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Choroid_plexus_carcinoma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 5
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/CNS_Embryonal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 6
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Craniopharyngioma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 7
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Diffuse_midline_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 8
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Dysembryoplastic_neuroepithelial_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 9
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Embryonal_tumor_with_multilayer_rosettes_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 10
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Ependymoma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 11
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Ewing_sarcoma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 12
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Ganglioglioma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 13
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Glial_neuronal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 14
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Hemangioblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 15
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/High_grade_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 16
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Low_grade_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 17
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Malignant_peripheral_nerve_sheath_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 18
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Medulloblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 19
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Meningioma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 20
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Neuroblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 21
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Neurofibroma_Plexiform_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 22
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Pilocytic_astrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"
[1] 23
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/molecular_subtype_PL_plots/Schwannoma_Alteration_type_timepoints_molecular_subtype_barplots_PL.pdf"

PBTA cohort

PBTA_panel_df <- PBTA_count_df %>% 
  mutate(cg_id = str_replace_all(cg_id, " ", "_"),
         molecular_subtype = str_wrap(molecular_subtype, 12)) # Edit to fit in the plot title for the panel

sample <- as.character(unique(PBTA_panel_df$cg_id)) 
sample <- sort(sample, decreasing = FALSE)
sample
 [1] "Adamantinomatous_Craniopharyngioma"                   "Atypical_choroid_plexus_papilloma"                   
 [3] "Atypical_Teratoid_Rhabdoid_Tumor"                     "Cavernoma"                                           
 [5] "Central_neurocytoma"                                  "Chondromyxoid_fibroma"                               
 [7] "Chordoma"                                             "Choroid_plexus_carcinoma"                            
 [9] "Choroid_plexus_papilloma"                             "Choroid_plexus_tumor"                                
[11] "CNS_Burkitt's_lymphoma"                               "CNS_Embryonal_tumor"                                 
[13] "CNS_neuroblastoma"                                    "Craniopharyngioma"                                   
[15] "Desmoplastic_infantile_astrocytoma_and_ganglioglioma" "Diffuse_fibrillary_astrocytoma"                      
[17] "Diffuse_hemispheric_glioma"                           "Diffuse_intrinsic_pontine_glioma"                    
[19] "Diffuse_leptomeningeal_glioneuronal_tumor"            "Diffuse_midline_glioma"                              
[21] "Dysembryoplastic_neuroepithelial_tumor"               "Embryonal_tumor_with_multilayer_rosettes"            
[23] "Ependymoma"                                           "Epstein_Barr_virus-related_tumor"                    
[25] "Ewing_sarcoma"                                        "Extraventricular_neurocytoma"                        
[27] "Ganglioglioma"                                        "Ganglioneuroblastoma"                                
[29] "Ganglioneuroma"                                       "Germinoma"                                           
[31] "Glial_neuronal_tumor"                                 "Hemangioblastoma"                                    
[33] "High_grade_glioma"                                    "Histiocytic_tumor"                                   
[35] "Infant_type_hemispheric_glioma"                       "Inflammatory_Myofibroblastic_Tumor"                  
[37] "Langerhans_Cell_histiocytosis"                        "Low_grade_glioma"                                    
[39] "Malignant_peripheral_nerve_sheath_tumor"              "Medulloblastoma"                                     
[41] "Melanocytic_tumor"                                    "Meningioma"                                          
[43] "Mesenchymal_tumor"                                    "Metastatic_secondary_tumors"                         
[45] "Mixed_germ_cell_tumor"                                "Neuroblastoma"                                       
[47] "Neurofibroma_Plexiform"                               "Non_germinomatous_germ_cell_tumor"                   
[49] "Oligodendroglioma"                                    "Perineuroma"                                         
[51] "Pilocytic_astrocytoma"                                "Pineoblastoma"                                       
[53] "Pleomorphic_xanthoastrocytoma"                        "Rhabdomyosarcoma"                                    
[55] "Rosai_Dorfman_disease"                                "Rosette_forming_glioneuronal_tumor"                  
[57] "Sarcoma"                                              "Schwannoma"                                          
[59] "Subependymal_Giant_Cell_Astrocytoma"                  "Teratoma"                                            
# Loop through variable
for (i in seq_along(sample)){
  print(i)
  df_sub <- PBTA_panel_df %>%
    filter(cg_id == sample[i]) 
 
   if (i %in% c(25, 41)){
    width_value = 25
    }else{
    width_value = 10
    }
  
# Define parameters for function
x_value <- df_sub$td_plot_group_n
title <- paste(sample[i], "Variants across molecular subtypes", sep = ": ")
rows_value <- 1

# Run function
fname <- paste0(molecular_subtype_PBTA_plots_dir, "/", sample[i], "_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf")
print(fname)
p <- create_stacked_barplot_variant_molecular_subtype(df = df_sub, x = x_value, palette = palette, title = title, rows = rows_value)
pdf(file = fname, width = width_value, height = 6)
print(p)
dev.off()
}
[1] 1
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Adamantinomatous_Craniopharyngioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 2
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Atypical_choroid_plexus_papilloma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 3
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Atypical_Teratoid_Rhabdoid_Tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 4
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Cavernoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 5
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Central_neurocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 6
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Chondromyxoid_fibroma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 7
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Chordoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 8
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Choroid_plexus_carcinoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 9
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Choroid_plexus_papilloma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 10
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Choroid_plexus_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 11
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/CNS_Burkitt's_lymphoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 12
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/CNS_Embryonal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 13
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/CNS_neuroblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 14
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Craniopharyngioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 15
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Desmoplastic_infantile_astrocytoma_and_ganglioglioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 16
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Diffuse_fibrillary_astrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 17
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Diffuse_hemispheric_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 18
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Diffuse_intrinsic_pontine_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 19
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Diffuse_leptomeningeal_glioneuronal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 20
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Diffuse_midline_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 21
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Dysembryoplastic_neuroepithelial_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 22
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Embryonal_tumor_with_multilayer_rosettes_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 23
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Ependymoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 24
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Epstein_Barr_virus-related_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 25
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Ewing_sarcoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 26
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Extraventricular_neurocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 27
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Ganglioglioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 28
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Ganglioneuroblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 29
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Ganglioneuroma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 30
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Germinoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 31
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Glial_neuronal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 32
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Hemangioblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 33
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/High_grade_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 34
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Histiocytic_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 35
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Infant_type_hemispheric_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 36
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Inflammatory_Myofibroblastic_Tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 37
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Langerhans_Cell_histiocytosis_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 38
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Low_grade_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 39
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Malignant_peripheral_nerve_sheath_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 40
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Medulloblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 41
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Melanocytic_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 42
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Meningioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 43
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Mesenchymal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 44
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Metastatic_secondary_tumors_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 45
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Mixed_germ_cell_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 46
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Neuroblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 47
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Neurofibroma_Plexiform_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 48
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Non_germinomatous_germ_cell_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 49
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Oligodendroglioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 50
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Perineuroma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 51
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Pilocytic_astrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 52
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Pineoblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 53
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Pleomorphic_xanthoastrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 54
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Rhabdomyosarcoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 55
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Rosai_Dorfman_disease_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 56
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Rosette_forming_glioneuronal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 57
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Sarcoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 58
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Schwannoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 59
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Subependymal_Giant_Cell_Astrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 60
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Teratoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"

Alterations per timepoint in each cancer type, molecular, and kids_id

PL cohort with molecular subtype

cg_df <- PL_count_df %>%
  # Fix syntax in cancer groups names 
  mutate(cg_id = str_replace_all(cg_id, " ", "_")) 

sample <- as.character(unique(cg_df$cg_id)) 
sample <- sort(sample, decreasing = FALSE)
sample
 [1] "Adamantinomatous_Craniopharyngioma"       "Atypical_Teratoid_Rhabdoid_Tumor"         "Chordoma"                                
 [4] "Choroid_plexus_carcinoma"                 "CNS_Embryonal_tumor"                      "Craniopharyngioma"                       
 [7] "Diffuse_midline_glioma"                   "Dysembryoplastic_neuroepithelial_tumor"   "Embryonal_tumor_with_multilayer_rosettes"
[10] "Ependymoma"                               "Ewing_sarcoma"                            "Ganglioglioma"                           
[13] "Glial_neuronal_tumor"                     "Hemangioblastoma"                         "High_grade_glioma"                       
[16] "Low_grade_glioma"                         "Malignant_peripheral_nerve_sheath_tumor"  "Medulloblastoma"                         
[19] "Meningioma"                               "Neuroblastoma"                            "Neurofibroma_Plexiform"                  
[22] "Pilocytic_astrocytoma"                    "Schwannoma"                              
# Loop through variable
for (i in seq_along(sample)){
  print(i)
  df_sub <- cg_df %>%
    filter(cg_id == sample[i]) %>%
     mutate(tumor_descriptor = factor(tumor_descriptor),
         tumor_descriptor = fct_relevel(tumor_descriptor, timepoints_order_abbrev),
         Variant_Classification = factor(Variant_Classification),
         Variant_Classification = fct_relevel(Variant_Classification, variants_order)) %>% 
    arrange(tumor_descriptor, Variant_Classification)

  if (i %in% c(2, 7, 15, 18)){
    width_value = 25
    }else if (i %in% c(10, 16)){
    width_value = 36
    }else{
    width_value = 10
      }

  # Define parameters for function
  x_value <- df_sub$td_ms_plot_group
  title <- paste(sample[i], "Variants across samples", sep = ": ")
  rows_value <- 1
  
  # Run function
  fname <- paste0(kids_molecular_subtype_PL_plots_dir, "/", sample[i], "_Alteration_type_timepoints_kids_barplots_PL.pdf")
  print(fname)
  p <- create_stacked_barplot_variant_kids(df = df_sub, x = x_value, palette = palette, title = title, rows = rows_value)
  pdf(file = fname, width = width_value, height = 6)
  print(p)
  dev.off()
  }
[1] 1
Warning: There were 42 warnings in `mutate()`.
The first warning was:
ℹ In argument: `tumor_descriptor = fct_relevel(tumor_descriptor, timepoints_order_abbrev)`.
ℹ In group 1: `tumor_descriptor = Diagnosis`, `td_ms_plot_group = "Dx:ADAM"`, `cg_id = "Adamantinomatous_Craniopharyngioma"`, `molecular_subtype =
  "CRANIO ADAM"`, `Kids_First_Participant_ID = "PT_CBTW4E3X"`, `match_id = "Diagnosis_PT_CBTW4E3X"`, `Variant_Classification = Missense_Mutation`,
  `td_ms_plot_group_n = "Dx:ADAM (N=27)"`, `td_plot_group_n = "Diagnosis (N=27)"`.
Caused by warning:
! 8 unknown levels in `f`: Dx, Pro, Rec, Dec, SM, Unavail, Metastatic, and Residual
ℹ Run ]8;;ide:run:dplyr::last_dplyr_warnings()dplyr::last_dplyr_warnings()]8;; to see the 41 remaining warnings.
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Adamantinomatous_Craniopharyngioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 2
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Atypical_Teratoid_Rhabdoid_Tumor_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 3
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Chordoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 4
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Choroid_plexus_carcinoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 5
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/CNS_Embryonal_tumor_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 6
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Craniopharyngioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 7
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Diffuse_midline_glioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 8
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Dysembryoplastic_neuroepithelial_tumor_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 9
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Embryonal_tumor_with_multilayer_rosettes_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 10
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Ependymoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 11
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Ewing_sarcoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 12
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Ganglioglioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 13
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Glial_neuronal_tumor_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 14
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Hemangioblastoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 15
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/High_grade_glioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 16
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Low_grade_glioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 17
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Malignant_peripheral_nerve_sheath_tumor_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 18
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Medulloblastoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 19
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Meningioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 20
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Neuroblastoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 21
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Neurofibroma_Plexiform_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 22
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Pilocytic_astrocytoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 23
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_molecular_subtype_PL_plots/Schwannoma_Alteration_type_timepoints_kids_barplots_PL.pdf"

PL cohort without molecular subtype

cg_df <- PL_count_df %>%
  # Fix syntax in cancer groups names 
  mutate(cg_id = str_replace_all(cg_id, " ", "_"))

sample <- as.character(unique(cg_df$cg_id)) 
sample <- sort(sample, decreasing = FALSE)
sample
 [1] "Adamantinomatous_Craniopharyngioma"       "Atypical_Teratoid_Rhabdoid_Tumor"         "Chordoma"                                
 [4] "Choroid_plexus_carcinoma"                 "CNS_Embryonal_tumor"                      "Craniopharyngioma"                       
 [7] "Diffuse_midline_glioma"                   "Dysembryoplastic_neuroepithelial_tumor"   "Embryonal_tumor_with_multilayer_rosettes"
[10] "Ependymoma"                               "Ewing_sarcoma"                            "Ganglioglioma"                           
[13] "Glial_neuronal_tumor"                     "Hemangioblastoma"                         "High_grade_glioma"                       
[16] "Low_grade_glioma"                         "Malignant_peripheral_nerve_sheath_tumor"  "Medulloblastoma"                         
[19] "Meningioma"                               "Neuroblastoma"                            "Neurofibroma_Plexiform"                  
[22] "Pilocytic_astrocytoma"                    "Schwannoma"                              
# Loop through variable
for (i in seq_along(sample)){
  print(i)
  df_sub <- cg_df %>%
    filter(cg_id == sample[i]) 

  if (i %in% c(2, 7, 15, 18)){
    width_value = 25
    }else if (i %in% c(10, 16)){
    width_value = 28
    }else{
    width_value = 10
      }

  # Define parameters for function
  x_value <- df_sub$td_ms_plot_group_n
  title <- paste(sample[i], "Variants across samples", sep = ": ")
  rows <- 1
  
  # Run function
  fname <- paste0(kids_PL_plots_dir, "/", sample[i], "_Alteration_type_timepoints_kids_barplots_PL.pdf")
  print(fname)
  p <- create_stacked_barplot_variant_kids(df = df_sub, x = x_value, palette = palette, title = title, rows = rows)
  pdf(file = fname, width = width_value, height = 6)
  print(p)
  dev.off()
  }
[1] 1
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Adamantinomatous_Craniopharyngioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 2
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Atypical_Teratoid_Rhabdoid_Tumor_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 3
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Chordoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 4
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Choroid_plexus_carcinoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 5
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/CNS_Embryonal_tumor_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 6
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Craniopharyngioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 7
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Diffuse_midline_glioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 8
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Dysembryoplastic_neuroepithelial_tumor_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 9
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Embryonal_tumor_with_multilayer_rosettes_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 10
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Ependymoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 11
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Ewing_sarcoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 12
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Ganglioglioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 13
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Glial_neuronal_tumor_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 14
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Hemangioblastoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 15
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/High_grade_glioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 16
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Low_grade_glioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 17
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Malignant_peripheral_nerve_sheath_tumor_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 18
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Medulloblastoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 19
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Meningioma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 20
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Neuroblastoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 21
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Neurofibroma_Plexiform_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 22
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Pilocytic_astrocytoma_Alteration_type_timepoints_kids_barplots_PL.pdf"
[1] 23
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PL/kids_PL_plots/Schwannoma_Alteration_type_timepoints_kids_barplots_PL.pdf"

sessionInfo()
R version 4.3.1 (2023-06-16)
Platform: x86_64-apple-darwin20 (64-bit)
Running under: macOS Ventura 13.6

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: America/New_York
tzcode source: internal

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] ggthemes_4.2.4  lubridate_1.9.3 forcats_1.0.0   stringr_1.5.0   dplyr_1.1.3     purrr_1.0.2     readr_2.1.4     tidyr_1.3.0     tibble_3.2.1   
[10] ggplot2_3.4.4   tidyverse_2.0.0

loaded via a namespace (and not attached):
 [1] sass_0.4.7        utf8_1.2.4        generics_0.1.3    stringi_1.7.12    hms_1.1.3         digest_0.6.33     magrittr_2.0.3    evaluate_0.23    
 [9] timechange_0.2.0  fastmap_1.1.1     rprojroot_2.0.4   jsonlite_1.8.7    fansi_1.0.5       scales_1.2.1      jquerylib_0.1.4   cli_3.6.1        
[17] rlang_1.1.2       crayon_1.5.2      bit64_4.0.5       munsell_0.5.0     cachem_1.0.8      withr_2.5.2       yaml_2.3.7        tools_4.3.1      
[25] parallel_4.3.1    tzdb_0.4.0        colorspace_2.1-0  vctrs_0.6.4       R6_2.5.1          lifecycle_1.0.4   bit_4.0.5         vroom_1.6.4      
[33] pkgconfig_2.0.3   pillar_1.9.0      bslib_0.5.1       gtable_0.3.4      glue_1.6.2        xfun_0.41         tidyselect_1.2.0  rstudioapi_0.15.0
[41] knitr_1.45        farver_2.1.1      htmltools_0.5.7   rmarkdown_2.25    labeling_0.4.3    compiler_4.3.1   
LS0tCnRpdGxlOiAiQ2xhc3NpZmljYXRpb24gb2YgVmFyaWFudHMgaW4gdGhlIHBhaXJlZCBsb25naXR1ZGluYWwgKFBMKSBhbmQgUEJUQSBjb2hvcnRzIgphdXRob3I6ICdBbnRvbmlhIENocm9uaSA8Y2hyb25pYUBjaG9wLmVkdT4gZm9yIEQzQicKZGF0ZTogIjIwMjMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKLS0tCgojIFNldCB1cApgYGB7ciBsb2FkLWxpYnJhcnl9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeSh0aWR5dmVyc2UpCn0pCmBgYAoKIyBEaXJlY3RvcmllcyBhbmQgRmlsZSBJbnB1dHMvT3V0cHV0cwpgYGB7ciBzZXQtZGlyLWFuZC1maWxlLW5hbWVzfQojIERldGVjdCB0aGUgIi5naXQiIGZvbGRlciAtLSB0aGlzIHdpbGwgYmUgaW4gdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkKIyBVc2UgdGhpcyBhcyB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gZW5zdXJlIHByb3BlciBzb3VyY2luZyBvZiBmdW5jdGlvbnMgCiMgbm8gbWF0dGVyIHdoZXJlIHRoaXMgaXMgY2FsbGVkIGZyb20Kcm9vdF9kaXIgPC0gcnByb2pyb290OjpmaW5kX3Jvb3QocnByb2pyb290OjpoYXNfZGlyKCIuZ2l0IikpCmFuYWx5c2lzX2RpciA8LSBmaWxlLnBhdGgocm9vdF9kaXIsICJhbmFseXNlcyIsICJ0bWItdmFmLWxvbmdpdHVkaW5hbCIpCnJlc3VsdHNfZGlyIDwtIGZpbGUucGF0aChhbmFseXNpc19kaXIsICJyZXN1bHRzIikKaW5wdXRfZGlyIDwtIGZpbGUucGF0aChhbmFseXNpc19kaXIsICJpbnB1dCIpCmZpbGVzX2RpciA8LSBmaWxlLnBhdGgocm9vdF9kaXIsICJhbmFseXNlcyIsICJzYW1wbGUtZGlzdHJpYnV0aW9uLWFuYWx5c2lzIiwgInJlc3VsdHMiKQoKIyBJbnB1dCBmaWxlcyBmb3IgdGhlIHBhaXJlZCBsb25naXR1ZGluYWwgKFBMKSBjb2hvcnQKcGJ0YV9maWxlIDwtIGZpbGUucGF0aChmaWxlc19kaXIsICJwYnRhLnRzdiIpICMgZmlsZSBmcm9tIGFkZC1zYW1wbGUtZGlzdHJpYnV0aW9uIG1vZHVsZQpnZW5vbWljX3BhaXJlZF9maWxlIDwtIGZpbGUucGF0aChmaWxlc19kaXIsICJnZW5vbWljX2Fzc2F5c19tYXRjaGVkX3RpbWVfcG9pbnRzLnRzdiIpCnRtYl92YWZfZmlsZSA8LSBmaWxlLnBhdGgocmVzdWx0c19kaXIsICJ0bWJfdmFmX2dlbm9taWMudHN2IikKcGFsZXR0ZV9maWxlIDwtIGZpbGUucGF0aChyb290X2RpciwgImZpZ3VyZXMiLCAicGFsZXR0ZXMiLCAib25jb3ByaW50X2NvbG9yX3BhbGV0dGUudHN2IikKCgojIElucHV0IGZpbGVzIGZvciB0aGUgUEJUQSBjb2hvcnQKbWFmX2ZpbGUgPC0gZmlsZS5wYXRoKHJlc3VsdHNfZGlyLCAibWFmLnRzdiIpCnRtYl9maWxlIDwtIGZpbGUucGF0aChpbnB1dF9kaXIsICJzbnYtbXV0YXRpb24tdG1iLWNvZGluZy50c3YiKQoKCiMgRmlsZSBwYXRoIHRvIFBMIHBsb3QgZGlyZWN0b3J5ClBMX3Bsb3RzX2RpciA8LQogIGZpbGUucGF0aChhbmFseXNpc19kaXIsICJwbG90cyIsICJBbHRlcmF0aW9uX3R5cGVfYmFycGxvdHNfUEwiKQppZiAoIWRpci5leGlzdHMoUExfcGxvdHNfZGlyKSkgewogIGRpci5jcmVhdGUoUExfcGxvdHNfZGlyKQp9CgojIEZpbGUgcGF0aCB0byBraWRzX1BMX3Bsb3RzIGRpcmVjdG9yeQpraWRzX1BMX3Bsb3RzX2RpciA8LQogIGZpbGUucGF0aChQTF9wbG90c19kaXIsICJraWRzX1BMX3Bsb3RzIikKaWYgKCFkaXIuZXhpc3RzKGtpZHNfUExfcGxvdHNfZGlyKSkgewogIGRpci5jcmVhdGUoa2lkc19QTF9wbG90c19kaXIpCn0KCiMgRmlsZSBwYXRoIHRvIGtpZHNfbW9sZWN1bGFyX3N1YnR5cGVfUExfcGxvdHNfZGlyIGRpcmVjdG9yeQpraWRzX21vbGVjdWxhcl9zdWJ0eXBlX1BMX3Bsb3RzX2RpciA8LQogIGZpbGUucGF0aChQTF9wbG90c19kaXIsICJraWRzX21vbGVjdWxhcl9zdWJ0eXBlX1BMX3Bsb3RzIikKaWYgKCFkaXIuZXhpc3RzKGtpZHNfbW9sZWN1bGFyX3N1YnR5cGVfUExfcGxvdHNfZGlyKSkgewogIGRpci5jcmVhdGUoa2lkc19tb2xlY3VsYXJfc3VidHlwZV9QTF9wbG90c19kaXIpCn0KCgojIEZpbGUgcGF0aCB0byBtb2xlY3VsYXJfc3VidHlwZV9QTF9wbG90cyBkaXJlY3RvcnkKbW9sZWN1bGFyX3N1YnR5cGVfUExfcGxvdHNfZGlyIDwtCiAgZmlsZS5wYXRoKFBMX3Bsb3RzX2RpciwgIm1vbGVjdWxhcl9zdWJ0eXBlX1BMX3Bsb3RzIikKaWYgKCFkaXIuZXhpc3RzKG1vbGVjdWxhcl9zdWJ0eXBlX1BMX3Bsb3RzX2RpcikpIHsKICBkaXIuY3JlYXRlKG1vbGVjdWxhcl9zdWJ0eXBlX1BMX3Bsb3RzX2RpcikKfQoKIyBGaWxlIHBhdGggdG8gUEJUQSBwbG90IGRpcmVjdG9yeQpQQlRBX3Bsb3RzX2RpciA8LQogIGZpbGUucGF0aChhbmFseXNpc19kaXIsICJwbG90cyIsICJBbHRlcmF0aW9uX3R5cGVfYmFycGxvdHNfUEJUQSIpCmlmICghZGlyLmV4aXN0cyhQQlRBX3Bsb3RzX2RpcikpIHsKICBkaXIuY3JlYXRlKFBCVEFfcGxvdHNfZGlyKQp9CgoKIyBGaWxlIHBhdGggdG8gbW9sZWN1bGFyX3N1YnR5cGVfUEJUQV9wbG90cyBkaXJlY3RvcnkKbW9sZWN1bGFyX3N1YnR5cGVfUEJUQV9wbG90c19kaXIgPC0KICBmaWxlLnBhdGgoUEJUQV9wbG90c19kaXIsICJtb2xlY3VsYXJfc3VidHlwZV9QQlRBX3Bsb3RzIikKaWYgKCFkaXIuZXhpc3RzKG1vbGVjdWxhcl9zdWJ0eXBlX1BCVEFfcGxvdHNfZGlyKSkgewogIGRpci5jcmVhdGUobW9sZWN1bGFyX3N1YnR5cGVfUEJUQV9wbG90c19kaXIpCn0KCnNvdXJjZShwYXN0ZTAocm9vdF9kaXIsICIvZmlndXJlcy9zY3JpcHRzL3RoZW1lLlIiKSkKc291cmNlKHBhc3RlMChhbmFseXNpc19kaXIsICIvdXRpbC9mdW5jdGlvbi1jcmVhdGUtYmFycGxvdC5SIikpCmBgYAoKIyBSZWFkIGluIGRhdGEgYW5kIHByb2Nlc3MKCmBgYHtyIH0KIyBWZWN0b3IgdG8gb3JkZXIgdGltZXBvaW50cwp0aW1lcG9pbnRzX29yZGVyIDwtIGMoIkRpYWdub3NpcyIsICJQcm9ncmVzc2l2ZSIsICJSZWN1cnJlbmNlIiwgIkRlY2Vhc2VkIiwgIlNlY29uZCBNYWxpZ25hbmN5IiwgIlVuYXZhaWxhYmxlIiwgIk1ldGFzdGF0aWMiLCAiUmVzaWR1YWwiKQp0aW1lcG9pbnRzX29yZGVyX2FiYnJldiA8LSBjKCJEeCIsICJQcm8iLCAiUmVjIiwgIkRlYyIsICJTTSIsICJVbmF2YWlsIiwgIk1ldGFzdGF0aWMiLCAiUmVzaWR1YWwiKQoKIyBWZWN0b3IgdG8gb3JkZXIgVmFyaWFudF9DbGFzc2lmaWNhdGlvbgp2YXJpYW50c19vcmRlciA8LSBjKCJGcmFtZV9TaGlmdF9EZWwiLCAiRnJhbWVfU2hpZnRfSW5zIiwgIkluX0ZyYW1lX0RlbCIsIAogICAgICAgICAgICAgICAgICAgICJJbl9GcmFtZV9JbnMiLCAiTWlzc2Vuc2VfTXV0YXRpb24iLCAiTm9uc2Vuc2VfTXV0YXRpb24iLCAKICAgICAgICAgICAgICAgICAgICAiTm9uc3RvcF9NdXRhdGlvbiIsICJTcGxpY2VfU2l0ZSIsICJUcmFuc2xhdGlvbl9TdGFydF9TaXRlIikKYGBgCiMjIFBMIGNvaG9ydAoKYGBge3IgbG9hZC1wcm9jZXNzLWlucHV0cy1QTH0KcGJ0YV9kZiA8LSByZWFkcjo6cmVhZF90c3YocGJ0YV9maWxlLCBndWVzc19tYXggPSAxMDAwMDAsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpICU+JSAKICBzZWxlY3QoS2lkc19GaXJzdF9QYXJ0aWNpcGFudF9JRCwgS2lkc19GaXJzdF9CaW9zcGVjaW1lbl9JRCwgY2dfbXVsdGlwbGUsIGNnX2lkLCBjZ0dGQUMsIHR1bW9yX2Rlc2NyaXB0b3IsIG1vbGVjdWxhcl9zdWJ0eXBlKSAlPiUgICNwbG90X2dyb3VwCiAgbXV0YXRlKHR1bW9yX2Rlc2NyaXB0b3JfYWJicmV2ID0gY2FzZV93aGVuKGdyZXBsKCJEaWFnbm9zaXMiLCB0dW1vcl9kZXNjcmlwdG9yKSB+ICJEeCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiUHJvZ3Jlc3NpdmUiLCB0dW1vcl9kZXNjcmlwdG9yKSB+ICJQcm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIlJlY3VycmVuY2UiLCB0dW1vcl9kZXNjcmlwdG9yKSB+ICJSZWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIkRlY2Vhc2VkIiwgdHVtb3JfZGVzY3JpcHRvcikgfiAiRGVjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJTZWNvbmQgTWFsaWduYW5jeSIsIHR1bW9yX2Rlc2NyaXB0b3IpIH4gIlNNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJVbmF2YWlsYWJsZSIsIHR1bW9yX2Rlc2NyaXB0b3IpIH4gIlVuYXZhaWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gdHVtb3JfZGVzY3JpcHRvciksCiAgICAgICAgIG1vbGVjdWxhcl9zdWJ0eXBlID0gc3RyX3JlcGxhY2UobW9sZWN1bGFyX3N1YnR5cGUsICIsIiwgIiIpLAogICAgICAgICBtb2xlY3VsYXJfc3VidHlwZV9lZGl0ZWQgPSBzdHJfcmVwbGFjZShtb2xlY3VsYXJfc3VidHlwZSwgIl5cXFMqICIsICIiKSwKICAgICAgICAgCiAgICAgICAgICMgY3JlYXRlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aW1lcG9pbnQgYW5kIG1vbGVjdWxhciBzdWJ0eXBlCiAgICAgICAgIHRkX21zX3Bsb3RfZ3JvdXAgPSBwYXN0ZSh0dW1vcl9kZXNjcmlwdG9yX2FiYnJldiwgbW9sZWN1bGFyX3N1YnR5cGVfZWRpdGVkLCBzZXAgPSAiOiIpKSAKICAKCiMgVGhpcyBpbmNsdWRlcyBub24gc3lub255bW91cyBtdXRhdGlvbnMgYXMgZGVzY3JpYmVkIGluIHRoZSBgMDEtcHJlcG9yY2Vzcy1kYXRhLlJtZGAKdG1iX3ZhZl9kZiA8LSByZWFkcjo6cmVhZF90c3YodG1iX3ZhZl9maWxlLCBndWVzc19tYXggPSAxMDAwMDAsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpICU+JSAKICBmaWx0ZXIoIXRtYiA+PSAxMCkgJT4lIAogIHNlbGVjdChLaWRzX0ZpcnN0X0Jpb3NwZWNpbWVuX0lELCBWYXJpYW50X0NsYXNzaWZpY2F0aW9uLCBnZW5lX3Byb3RlaW4sIG11dGF0aW9uX2NvdW50LAlyZWdpb25fc2l6ZSwgdG1iLCBWQUYpICU+JSAKICBmaWx0ZXIoIWlzLm5hKFZhcmlhbnRfQ2xhc3NpZmljYXRpb24pKQoKIyBMaXN0IHdpdGggcGF0aWVudHMgd2l0aCBwYWlyZWQgbG9uZ2l0dWRpbmFsIGdlbm9taWMgc3BlY2ltZW5zCmdlbm9taWNfcGFpcmVkX2RmIDwtIHJlYWRyOjpyZWFkX3RzdihnZW5vbWljX3BhaXJlZF9maWxlLCBndWVzc19tYXggPSAxMDAwMDAsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpICU+JQogIGxlZnRfam9pbihwYnRhX2RmLCBieSA9IGMoIktpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQiKSkgJT4lIAogIGxlZnRfam9pbih0bWJfdmFmX2RmLCBieSA9IGMoIktpZHNfRmlyc3RfQmlvc3BlY2ltZW5fSUQiKSkgJT4lCiAgZmlsdGVyKCFpcy5uYSh0bWIpKQoKIyBOdW1iZXIgb2YgcGF0aWVudHMgd2l0aCBUTUIgaW5mb3JtYXRpb24Kbm9fc2FtcGxlc193aXRoX3RtYiA8LSBwcmludChsZW5ndGgodW5pcXVlKGdlbm9taWNfcGFpcmVkX2RmJEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQpKSkKCiMgQXR0ZW50aW9uIGFzIHNvbWUgYnMgc3BlY2ltZW4gbWlnaHQgbm90IGhhdmUgVE1CLgojIElmIHRoYXQgaGFwcGVucywgd2Ugd2lsbCBlbmQgdXAgd2l0aCBzYW1wbGVzIGxhY2tpbmcgdGltZXBvaW50cy4KIyBMZXQncyBpZGVudGlmeSB0aGVzZSBzYW1wbGVzIGFuZCByZW1vdmUgdGhlbS4KUExfZGYgPC0gZ2Vub21pY19wYWlyZWRfZGYgJT4lCiAgc2VsZWN0KEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQsIHR1bW9yX2Rlc2NyaXB0b3IpICU+JSAKICB1bmlxdWUoKSAlPiUKICBhcnJhbmdlKEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQsIHR1bW9yX2Rlc2NyaXB0b3IpICU+JQogIGdyb3VwX2J5KEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQpICU+JQogIHN1bW1hcml6ZSh0dW1vcl9kZXNjcmlwdG9yX3N1bSA9IHN0cl9jKHR1bW9yX2Rlc2NyaXB0b3IsIGNvbGxhcHNlID0gIjsiKSkgJT4lCiAgZmlsdGVyKCF0dW1vcl9kZXNjcmlwdG9yX3N1bSAlaW4lIGMoIkRpYWdub3NpcyIsICJQcm9ncmVzc2l2ZSIsICJSZWN1cnJlbmNlIiwgIlNlY29uZCBNYWxpZ25hbmN5IiwgIlVuYXZhaWxhYmxlIiwgIkRlY2Vhc2VkIiwgIlByb2dyZXNzaXZlO1Byb2dyZXNzaXZlIikpICU+JQogIGxlZnRfam9pbihnZW5vbWljX3BhaXJlZF9kZiwgYnkgPSBjKCJLaWRzX0ZpcnN0X1BhcnRpY2lwYW50X0lEIikpICU+JQogIGZpbHRlcighY2dfaWQgPT0gIk5BIiwKICAgICAgICAgIXR1bW9yX2Rlc2NyaXB0b3IgPT0gIk5vdCBSZXBvcnRlZCIpICU+JSAKICBtdXRhdGUobWF0Y2hfaWQgPSBwYXN0ZSh0dW1vcl9kZXNjcmlwdG9yLCBLaWRzX0ZpcnN0X1BhcnRpY2lwYW50X0lELCBzZXAgPSAiXyIpLAogICAgICAgICBjZ19pZCA9IHN0cl9yZXBsYWNlKGNnX2lkLCBjKCIvfC0iKSwgIiAiKSkKICAKIyBMZXQncyBzdW1tYXJpemUgdGRfbXNfcGxvdF9ncm91cCBhbmQgdXNlIHRoaXMgZm9yIHZpc3VhbGl6YXRpb24gcHVycG9zZXMKUExfdGRfbXNfcGxvdF9ncm91cF9uX2RmIDwtIFBMX2RmICU+JSAKICBkcGx5cjo6Y291bnQoY2dfaWQsIHRkX21zX3Bsb3RfZ3JvdXApICU+JSAKICBkcGx5cjo6bXV0YXRlKHRkX21zX3Bsb3RfZ3JvdXBfbiA9IGdsdWU6OmdsdWUoInt0ZF9tc19wbG90X2dyb3VwfSAoTj17bn0pIikpICU+JSAKICBkcGx5cjo6cmVuYW1lKHRkX21zX3Bsb3RfZ3JvdXBfbnVtYmVyID0gbikKCiMgTGV0J3Mgc3VtbWFyaXplIHR1bW9yX2Rlc2NyaXB0b3IgYW5kIHVzZSB0aGlzIGZvciB2aXN1YWxpemF0aW9uIHB1cnBvc2VzClBMX3RkX3Bsb3RfZ3JvdXBfbl9kZiA8LSBQTF9kZiAlPiUgCiAgZHBseXI6OmNvdW50KGNnX2lkLCB0dW1vcl9kZXNjcmlwdG9yKSAlPiUgCiAgZHBseXI6Om11dGF0ZSh0ZF9wbG90X2dyb3VwX24gPSBnbHVlOjpnbHVlKCJ7dHVtb3JfZGVzY3JpcHRvcn0gKE49e259KSIpKSAlPiUgCiAgZHBseXI6OnJlbmFtZSh0ZF9wbG90X2dyb3VwX251bWJlciA9IG4pCgojIExldCdzIGNvdW50IG51bWJlciBvZiBzYW1wbGVzIApQTF9jb3VudF9kZiA8LSBQTF9kZiAlPiUKICBsZWZ0X2pvaW4oUExfdGRfbXNfcGxvdF9ncm91cF9uX2RmKSAlPiUKICBsZWZ0X2pvaW4oUExfdGRfcGxvdF9ncm91cF9uX2RmKSAlPiUKICBmaWx0ZXIoIWlzLm5hKFZhcmlhbnRfQ2xhc3NpZmljYXRpb24pKSAlPiUgCiAgIyByZW1vdmUgaWYgdG90YWwgI3NhbXBsZXMgcGVyIHRpbWVwb2ludCBpcyBsZXNzIHRoYW4gMgogICNmaWx0ZXIoIXRkX21zX3Bsb3RfZ3JvdXBfbnVtYmVyIDw9IDIpICU+JSAKICBncm91cF9ieSh0dW1vcl9kZXNjcmlwdG9yLCB0ZF9tc19wbG90X2dyb3VwLCBjZ19pZCwgbW9sZWN1bGFyX3N1YnR5cGUsIEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQsIG1hdGNoX2lkLCBWYXJpYW50X0NsYXNzaWZpY2F0aW9uLCB0ZF9tc19wbG90X2dyb3VwX24sIHRkX3Bsb3RfZ3JvdXBfbikgJT4lIAogIGRwbHlyOjpjb3VudChLaWRzX0ZpcnN0X1BhcnRpY2lwYW50X0lEKSAlPiUgCiAgbXV0YXRlKHR1bW9yX2Rlc2NyaXB0b3IgPSBmYWN0b3IodHVtb3JfZGVzY3JpcHRvciksCiAgICAgICAgIHR1bW9yX2Rlc2NyaXB0b3IgPSBmY3RfcmVsZXZlbCh0dW1vcl9kZXNjcmlwdG9yLCB0aW1lcG9pbnRzX29yZGVyKSwKICAgICAgICAgVmFyaWFudF9DbGFzc2lmaWNhdGlvbiA9IGZhY3RvcihWYXJpYW50X0NsYXNzaWZpY2F0aW9uKSwKICAgICAgICAgVmFyaWFudF9DbGFzc2lmaWNhdGlvbiA9IGZjdF9yZWxldmVsKFZhcmlhbnRfQ2xhc3NpZmljYXRpb24sIHZhcmlhbnRzX29yZGVyKSkgJT4lIAogIGFycmFuZ2UodHVtb3JfZGVzY3JpcHRvciwgVmFyaWFudF9DbGFzc2lmaWNhdGlvbiwgZGVzYyhtb2xlY3VsYXJfc3VidHlwZSkpIAoKIyBOdW1iZXIgb2YgcGF0aWVudHMgd2l0aCBUTUIgaW5mb3JtYXRpb24gYW5kIHBhaXJlZCB0aW1lcG9pbnRzCm5vX3NhbXBsZXMgPC0gcHJpbnQobGVuZ3RoKHVuaXF1ZShQTF9jb3VudF9kZiRLaWRzX0ZpcnN0X1BhcnRpY2lwYW50X0lEKSkpCgpgYGAgCgojIyBQQlRBIGNvaG9ydAoKYGBge3IgbG9hZC1wcm9jZXNzLWlucHV0cy1QQlRBfQp0bWJfZGYgPC0gcmVhZHI6OnJlYWRfdHN2KHRtYl9maWxlLCBndWVzc19tYXggPSAxMDAwMDAsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpICU+JSAKICBkcGx5cjo6cmVuYW1lKEtpZHNfRmlyc3RfQmlvc3BlY2ltZW5fSUQgPSBUdW1vcl9TYW1wbGVfQmFyY29kZSkgIyBjaGFuZ2UgbmFtZSBvZiB0aGUgYmlvc3BlY2ltZW4gdG8gbWF0Y2ggdGhlIG9uZSBmcm9tIHRoZSBoaXN0b2xvZ2llcyBmaWxlcwoKdG1iX3ZhZl9kZiA8LSByZWFkcjo6cmVhZF90c3YobWFmX2ZpbGUsIGd1ZXNzX21heCA9IDEwMDAwMCwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkgJT4lCiAgbGVmdF9qb2luKHRtYl9kZiwgYnkgPSBjKCJLaWRzX0ZpcnN0X0Jpb3NwZWNpbWVuX0lEIikpICU+JSAKICBmaWx0ZXIoIXRtYiA+PSAxMCwKICAgICAgICAgIWlzLm5hKHRtYikpIAoKUEJUQV9kZiA8LSBwYnRhX2RmICU+JSAKICBsZWZ0X2pvaW4odG1iX3ZhZl9kZiwgYnkgPSBjKCJLaWRzX0ZpcnN0X0Jpb3NwZWNpbWVuX0lEIikpICU+JSAKICBmaWx0ZXIoIWNnX2lkID09ICJOQSIsCiAgICAgICAgICF0dW1vcl9kZXNjcmlwdG9yID09ICJOb3QgUmVwb3J0ZWQiLAogICAgICAgICAhaXMubmEoVmFyaWFudF9DbGFzc2lmaWNhdGlvbikpICU+JSAKICBtdXRhdGUobWF0Y2hfaWQgPSBwYXN0ZSh0dW1vcl9kZXNjcmlwdG9yLCBLaWRzX0ZpcnN0X1BhcnRpY2lwYW50X0lELCBzZXAgPSAiXyIpLAogICAgICAgICBjZ19pZCA9IHN0cl9yZXBsYWNlKGNnX2lkLCBjKCIvfC0iKSwgIiAiKSkKCiMgTnVtYmVyIG9mIHBhdGllbnRzIHdpdGggVE1CIGluZm9ybWF0aW9uCm5vX3NhbXBsZXMgPC0gcHJpbnQobGVuZ3RoKHVuaXF1ZShQQlRBX2RmJEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQpKSkKCgojIExldCdzIHN1bW1hcml6ZSB0dW1vcl9kZXNjcmlwdG9yIGFuZCB1c2UgdGhpcyBmb3IgdmlzdWFsaXphdGlvbiBwdXJwb3NlcwpQQlRBX3RkX3Bsb3RfZ3JvdXBfbl9kZiA8LSBQQlRBX2RmICU+JSAKICBkcGx5cjo6Y291bnQoY2dfaWQsIHR1bW9yX2Rlc2NyaXB0b3IpICU+JSAKICBkcGx5cjo6bXV0YXRlKHRkX3Bsb3RfZ3JvdXBfbiA9IGdsdWU6OmdsdWUoInt0dW1vcl9kZXNjcmlwdG9yfSAoTj17bn0pIikpICU+JSAKICBkcGx5cjo6cmVuYW1lKHRkX3Bsb3RfZ3JvdXBfbnVtYmVyID0gbikKCiMgTGV0J3MgY291bnQgbnVtYmVyIG9mIHNhbXBsZXMgClBCVEFfY291bnRfZGYgPC0gUEJUQV9kZiAlPiUgCiAgbGVmdF9qb2luKFBCVEFfdGRfcGxvdF9ncm91cF9uX2RmLCBieSA9IGpvaW5fYnkoImNnX2lkIiwgInR1bW9yX2Rlc2NyaXB0b3IiKSkgJT4lIAogIGZpbHRlcighaXMubmEoVmFyaWFudF9DbGFzc2lmaWNhdGlvbikpICU+JSAKICBncm91cF9ieSh0dW1vcl9kZXNjcmlwdG9yLCBjZ19pZCwgbW9sZWN1bGFyX3N1YnR5cGUsIEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQsIG1hdGNoX2lkLCBWYXJpYW50X0NsYXNzaWZpY2F0aW9uLCB0ZF9wbG90X2dyb3VwX24pICU+JSAKICBkcGx5cjo6Y291bnQoS2lkc19GaXJzdF9QYXJ0aWNpcGFudF9JRCkgJT4lIAogIG11dGF0ZSh0dW1vcl9kZXNjcmlwdG9yID0gZmFjdG9yKHR1bW9yX2Rlc2NyaXB0b3IpLAogICAgICAgICB0dW1vcl9kZXNjcmlwdG9yID0gZmN0X3JlbGV2ZWwodHVtb3JfZGVzY3JpcHRvciwgdGltZXBvaW50c19vcmRlciksCiAgICAgICAgIFZhcmlhbnRfQ2xhc3NpZmljYXRpb24gPSBmYWN0b3IoVmFyaWFudF9DbGFzc2lmaWNhdGlvbiksCiAgICAgICAgIFZhcmlhbnRfQ2xhc3NpZmljYXRpb24gPSBmY3RfcmVsZXZlbChWYXJpYW50X0NsYXNzaWZpY2F0aW9uLCB2YXJpYW50c19vcmRlcikpICU+JSAKICBhcnJhbmdlKHR1bW9yX2Rlc2NyaXB0b3IsIFZhcmlhbnRfQ2xhc3NpZmljYXRpb24sIGRlc2MobW9sZWN1bGFyX3N1YnR5cGUpKSAKCmBgYAoKCgojIERlZmluZSBwYXJhbWV0ZXJzIGZvciBwbG90cwoKYGBge3IgZGVmaW5lLXBhcmFtZXRlcnMtZm9yLXBsb3RzfQojIFJlYWQgY29sb3IgcGFsZXR0ZQpwYWxldHRlX2RmIDwtIHJlYWRyOjpyZWFkX3RzdihwYWxldHRlX2ZpbGUsIGd1ZXNzX21heCA9IDEwMDAwMCwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkgJT4lIAogIG11dGF0ZShoZXhfY29kZXMgPSBjYXNlX3doZW4oZ3JlcGwoIiMwMDAwMDAiLCBoZXhfY29kZXMpIH4gIm9yYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gaGV4X2NvZGVzKSwKICAgIGNvbG9yX25hbWVzID0gZmFjdG9yKGNvbG9yX25hbWVzKSwKICAgICAgICAgY29sb3JfbmFtZXMgPSBmY3RfcmVsZXZlbChjb2xvcl9uYW1lcywgdmFyaWFudHNfb3JkZXIpKSAlPiUgCiAgYXJyYW5nZShjb2xvcl9uYW1lcykKCiAgICAgICAgIAojIERlZmluZSBhbmQgb3JkZXIgcGFsZXR0ZQpwYWxldHRlIDwtIHBhbGV0dGVfZGYkaGV4X2NvZGVzCm5hbWVzKHBhbGV0dGUpIDwtIHBhbGV0dGVfZGYkY29sb3JfbmFtZXMKYGBgCgojIEFsdGVyYXRpb25zIHBlciB0aW1lcG9pbnQKCiMjIFBMIGNvaG9ydAoKYGBge3IgcGxvdC10aW1lcG9pbnQtUEwsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSA2LCBmaWcuZnVsbHdpZHRoID0gVFJVRX0KIyBEZWZpbmUgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb24KeF92YWx1ZSA8LSBQTF9jb3VudF9kZiR0dW1vcl9kZXNjcmlwdG9yCnRpdGxlIDwtIHBhc3RlKCJWYXJpYW50IHR5cGVzIGluIHRoZSBwYWlyZWQgbG9uZ2l0dWRpbmFsIGNvaG9ydCIsIHNlcCA9ICIgIikKCiMgUnVuIGZ1bmN0aW9uCmZuYW1lIDwtIHBhc3RlMChQTF9wbG90c19kaXIsICIvIiwgIkFsdGVyYXRpb25fdHlwZV90aW1lcG9pbnRzX2JhcnBsb3RzX1BMLnBkZiIpCnByaW50KGZuYW1lKQpwIDwtIGNyZWF0ZV9zdGFja2VkX2JhcnBsb3RfdmFyaWFudChkZiA9IFBMX2NvdW50X2RmLCB4ID0geF92YWx1ZSwgcGFsZXR0ZSA9IHBhbGV0dGUsIHRpdGxlID0gdGl0bGUpCnBkZihmaWxlID0gZm5hbWUsIHdpZHRoID0gNiwgaGVpZ2h0ID0gNikKcHJpbnQocCkKZGV2Lm9mZigpCmBgYAoKIyMgUEJUQSBjb2hvcnQKCmBgYHtyIHBsb3QtdGltZXBvaW50LVBCVEEsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSA2LCBmaWcuZnVsbHdpZHRoID0gVFJVRX0KIyBEZWZpbmUgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb24KeF92YWx1ZSA8LSBQQlRBX2NvdW50X2RmJHR1bW9yX2Rlc2NyaXB0b3IKdGl0bGUgPC0gcGFzdGUoIlZhcmlhbnQgdHlwZXMgaW4gdGhlIFBCVEEgY29ob3J0Iiwgc2VwID0gIiAiKQoKIyBSdW4gZnVuY3Rpb24KZm5hbWUgPC0gcGFzdGUwKFBCVEFfcGxvdHNfZGlyLCAiLyIsICJBbHRlcmF0aW9uX3R5cGVfdGltZXBvaW50c19iYXJwbG90c19QQlRBLnBkZiIpCnByaW50KGZuYW1lKQpwIDwtIGNyZWF0ZV9zdGFja2VkX2JhcnBsb3RfdmFyaWFudChkZiA9IFBCVEFfY291bnRfZGYsIHggPSB4X3ZhbHVlLCBwYWxldHRlID0gcGFsZXR0ZSwgdGl0bGUgPSB0aXRsZSkKcGRmKGZpbGUgPSBmbmFtZSwgd2lkdGggPSA2LCBoZWlnaHQgPSA2KQpwcmludChwKQpkZXYub2ZmKCkKYGBgCgoKIyBBbHRlcmF0aW9ucyBwZXIgdGltZXBvaW50IGluIGVhY2ggY2FuY2VyIHR5cGUKCiMjIFBMIGNvaG9ydAoKYGBge3IgcGxvdC1jZy1pZC1QTCwgZmlnLndpZHRoID0gMTIsIGZpZy5oZWlnaHQgPSAxNSwgZmlnLmZ1bGx3aWR0aCA9IFRSVUV9ClBMX3BhbmVsX2RmIDwtIFBMX2NvdW50X2RmICU+JSAKICBtdXRhdGUoY2dfaWQgPSBzdHJfd3JhcChjZ19pZCwgMTIpKSAjIEVkaXQgdG8gZml0IGluIHRoZSBwbG90IHRpdGxlIGZvciB0aGUgcGFuZWwKCiMgRGVmaW5lIHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uCnhfdmFsdWUgPC0gUExfcGFuZWxfZGYkdHVtb3JfZGVzY3JpcHRvcgp0aXRsZSA8LSBwYXN0ZSgiVmFyaWFudCB0eXBlcyBhY3Jvc3MgY2FuY2VyIGdyb3VwcyBpbiB0aGUgcGFpcmVkIGxvbmdpdHVkaW5hbCBjb2hvcnQiLCBzZXAgPSAiICIpCnJvd3MgPC0gNQoKIyBSdW4gZnVuY3Rpb24KZm5hbWUgPC0gcGFzdGUwKFBMX3Bsb3RzX2RpciwgIi8iLCAiQWx0ZXJhdGlvbl90eXBlX3RpbWVwb2ludHNfY2dfaWRfYmFycGxvdHNfUEwucGRmIikKcHJpbnQoZm5hbWUpCnAgPC0gY3JlYXRlX3N0YWNrZWRfYmFycGxvdF92YXJpYW50X2NnX2lkKGRmID0gUExfcGFuZWxfZGYsIHggPSB4X3ZhbHVlLCBwYWxldHRlID0gcGFsZXR0ZSwgdGl0bGUgPSB0aXRsZSwgcm93cyA9IHJvd3MpCnBkZihmaWxlID0gZm5hbWUsIHdpZHRoID0gMTIsIGhlaWdodCA9IDE1KQpwcmludChwKQpkZXYub2ZmKCkKYGBgCgojIyBQQlRBIGNvaG9ydAoKCmBgYHtyIHBsb3QtY2ctaWQtUEJUQSwgZmlnLndpZHRoID0gMTUsIGZpZy5oZWlnaHQgPSAyOCwgZmlnLmZ1bGx3aWR0aCA9IFRSVUV9ClBCVEFfcGFuZWxfZGYgPC0gUEJUQV9jb3VudF9kZiAlPiUgCiAgbXV0YXRlKGNnX2lkID0gc3RyX3dyYXAoY2dfaWQsIDEyKSkgIyBFZGl0IHRvIGZpdCBpbiB0aGUgcGxvdCB0aXRsZSBmb3IgdGhlIHBhbmVsCgojIERlZmluZSBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbgp4X3ZhbHVlIDwtIFBCVEFfcGFuZWxfZGYkdHVtb3JfZGVzY3JpcHRvcgp0aXRsZSA8LSBwYXN0ZSgiVmFyaWFudCB0eXBlcyBhY3Jvc3MgY2FuY2VyIGdyb3VwcyBpbiB0aGUgUEJUQSBjb2hvcnQiLCBzZXAgPSAiICIpCnJvd3MgPC0gMTAKCiMgUnVuIGZ1bmN0aW9uCmZuYW1lIDwtIHBhc3RlMChQQlRBX3Bsb3RzX2RpciwgIi8iLCAiQWx0ZXJhdGlvbl90eXBlX3RpbWVwb2ludHNfY2dfaWRfYmFycGxvdHNfUEJUQS5wZGYiKQpwcmludChmbmFtZSkKcCA8LSBjcmVhdGVfc3RhY2tlZF9iYXJwbG90X3ZhcmlhbnRfY2dfaWQoZGYgPSBQQlRBX3BhbmVsX2RmLCB4ID0geF92YWx1ZSwgcGFsZXR0ZSA9IHBhbGV0dGUsIHRpdGxlID0gdGl0bGUsIHJvd3MgPSByb3dzKQpwZGYoZmlsZSA9IGZuYW1lLCB3aWR0aCA9IDE1LCBoZWlnaHQgPSAyOCkKcHJpbnQocCkKZGV2Lm9mZigpCmBgYAoKCiMgQWx0ZXJhdGlvbnMgcGVyIHRpbWVwb2ludCBpbiBlYWNoIGNhbmNlciB0eXBlIGFuZCBtb2xlY3VsYXIgc3VidHlwZQoKIyMgUEwgY29ob3J0CgpgYGB7ciBwbG90LW1vbGVjdWxhci1zdWJ0eXBlLVBMLCBmaWcud2lkdGggPSAxMiwgZmlnLmhlaWdodCA9IDYsIGZpZy5mdWxsd2lkdGggPSBUUlVFfQpQTF9wYW5lbF9kZiA8LSBQTF9jb3VudF9kZiAlPiUgCiAgbXV0YXRlKGNnX2lkID0gc3RyX3JlcGxhY2VfYWxsKGNnX2lkLCAiICIsICJfIiksCiAgICAgICAgIyBFZGl0IHRvIGZpdCBpbiB0aGUgcGxvdCB0aXRsZSBmb3IgdGhlIHBhbmVsCiAgICAgICAgIG1vbGVjdWxhcl9zdWJ0eXBlID0gc3RyX3dyYXAobW9sZWN1bGFyX3N1YnR5cGUsIDEyKSkgCgpzYW1wbGUgPC0gYXMuY2hhcmFjdGVyKHVuaXF1ZShQTF9wYW5lbF9kZiRjZ19pZCkpIApzYW1wbGUgPC0gc29ydChzYW1wbGUsIGRlY3JlYXNpbmcgPSBGQUxTRSkKc2FtcGxlCgoKIyBMb29wIHRocm91Z2ggdmFyaWFibGUKZm9yIChpIGluIHNlcV9hbG9uZyhzYW1wbGUpKXsKICBwcmludChpKQogIGRmX3N1YiA8LSBQTF9wYW5lbF9kZiAlPiUKICAgIGZpbHRlcihjZ19pZCA9PSBzYW1wbGVbaV0pIAogIAogIGlmIChpICVpbiUgYygxMCwgMTYpKXsKICAgIHdpZHRoX3ZhbHVlID0gMjUKICAgIH1lbHNlewogICAgd2lkdGhfdmFsdWUgPSAxMAogICAgfQogIAojIERlZmluZSBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbgp4X3ZhbHVlIDwtIGRmX3N1YiR0ZF9wbG90X2dyb3VwX24KdGl0bGUgPC0gcGFzdGUoc2FtcGxlW2ldLCAiVmFyaWFudHMgYWNyb3NzIG1vbGVjdWxhciBzdWJ0eXBlcyIsIHNlcCA9ICI6ICIpCnJvd3NfdmFsdWUgPC0gMQoKIyBSdW4gZnVuY3Rpb24KZm5hbWUgPC0gcGFzdGUwKG1vbGVjdWxhcl9zdWJ0eXBlX1BMX3Bsb3RzX2RpciwgIi8iLCBzYW1wbGVbaV0sICJfQWx0ZXJhdGlvbl90eXBlX3RpbWVwb2ludHNfbW9sZWN1bGFyX3N1YnR5cGVfYmFycGxvdHNfUEwucGRmIikKcHJpbnQoZm5hbWUpCnAgPC0gY3JlYXRlX3N0YWNrZWRfYmFycGxvdF92YXJpYW50X21vbGVjdWxhcl9zdWJ0eXBlKGRmID0gZGZfc3ViLCB4ID0geF92YWx1ZSwgcGFsZXR0ZSA9IHBhbGV0dGUsIHRpdGxlID0gdGl0bGUsIHJvd3MgPSByb3dzX3ZhbHVlKQpwZGYoZmlsZSA9IGZuYW1lLCB3aWR0aCA9IHdpZHRoX3ZhbHVlLCBoZWlnaHQgPSA2KQpwcmludChwKQpkZXYub2ZmKCkKfQoKYGBgCgojIyBQQlRBIGNvaG9ydAoKCmBgYHtyIHBsb3QtbW9sZWN1bGFyLXN1YnR5cGUtUEJUQSwgZmlnLndpZHRoID0gMTIsIGZpZy5oZWlnaHQgPSA2LCBmaWcuZnVsbHdpZHRoID0gVFJVRX0KUEJUQV9wYW5lbF9kZiA8LSBQQlRBX2NvdW50X2RmICU+JSAKICBtdXRhdGUoY2dfaWQgPSBzdHJfcmVwbGFjZV9hbGwoY2dfaWQsICIgIiwgIl8iKSwKICAgICAgICAgbW9sZWN1bGFyX3N1YnR5cGUgPSBzdHJfd3JhcChtb2xlY3VsYXJfc3VidHlwZSwgMTIpKSAjIEVkaXQgdG8gZml0IGluIHRoZSBwbG90IHRpdGxlIGZvciB0aGUgcGFuZWwKCnNhbXBsZSA8LSBhcy5jaGFyYWN0ZXIodW5pcXVlKFBCVEFfcGFuZWxfZGYkY2dfaWQpKSAKc2FtcGxlIDwtIHNvcnQoc2FtcGxlLCBkZWNyZWFzaW5nID0gRkFMU0UpCnNhbXBsZQoKCiMgTG9vcCB0aHJvdWdoIHZhcmlhYmxlCmZvciAoaSBpbiBzZXFfYWxvbmcoc2FtcGxlKSl7CiAgcHJpbnQoaSkKICBkZl9zdWIgPC0gUEJUQV9wYW5lbF9kZiAlPiUKICAgIGZpbHRlcihjZ19pZCA9PSBzYW1wbGVbaV0pIAogCiAgIGlmIChpICVpbiUgYygyNSwgNDEpKXsKICAgIHdpZHRoX3ZhbHVlID0gMjUKICAgIH1lbHNlewogICAgd2lkdGhfdmFsdWUgPSAxMAogICAgfQogIAojIERlZmluZSBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbgp4X3ZhbHVlIDwtIGRmX3N1YiR0ZF9wbG90X2dyb3VwX24KdGl0bGUgPC0gcGFzdGUoc2FtcGxlW2ldLCAiVmFyaWFudHMgYWNyb3NzIG1vbGVjdWxhciBzdWJ0eXBlcyIsIHNlcCA9ICI6ICIpCnJvd3NfdmFsdWUgPC0gMQoKIyBSdW4gZnVuY3Rpb24KZm5hbWUgPC0gcGFzdGUwKG1vbGVjdWxhcl9zdWJ0eXBlX1BCVEFfcGxvdHNfZGlyLCAiLyIsIHNhbXBsZVtpXSwgIl9BbHRlcmF0aW9uX3R5cGVfdGltZXBvaW50c19tb2xlY3VsYXJfc3VidHlwZV9iYXJwbG90c19QQlRBLnBkZiIpCnByaW50KGZuYW1lKQpwIDwtIGNyZWF0ZV9zdGFja2VkX2JhcnBsb3RfdmFyaWFudF9tb2xlY3VsYXJfc3VidHlwZShkZiA9IGRmX3N1YiwgeCA9IHhfdmFsdWUsIHBhbGV0dGUgPSBwYWxldHRlLCB0aXRsZSA9IHRpdGxlLCByb3dzID0gcm93c192YWx1ZSkKcGRmKGZpbGUgPSBmbmFtZSwgd2lkdGggPSB3aWR0aF92YWx1ZSwgaGVpZ2h0ID0gNikKcHJpbnQocCkKZGV2Lm9mZigpCn0KCmBgYAoKCiMgQWx0ZXJhdGlvbnMgcGVyIHRpbWVwb2ludCBpbiBlYWNoIGNhbmNlciB0eXBlLCBtb2xlY3VsYXIsIGFuZCBraWRzX2lkCgojIyBQTCBjb2hvcnQgd2l0aCBtb2xlY3VsYXIgc3VidHlwZQoKYGBge3IgcGxvdC1jZy1pZC1tb2xlY3VsYXItc3VidHlwZS1raWRzLVBMLCBmaWcud2lkdGggPSAxMCwgZmlnLmhlaWdodCA9IDYsIGZpZy5mdWxsd2lkdGggPSBUUlVFfQpjZ19kZiA8LSBQTF9jb3VudF9kZiAlPiUKICAjIEZpeCBzeW50YXggaW4gY2FuY2VyIGdyb3VwcyBuYW1lcyAKICBtdXRhdGUoY2dfaWQgPSBzdHJfcmVwbGFjZV9hbGwoY2dfaWQsICIgIiwgIl8iKSkgCgpzYW1wbGUgPC0gYXMuY2hhcmFjdGVyKHVuaXF1ZShjZ19kZiRjZ19pZCkpIApzYW1wbGUgPC0gc29ydChzYW1wbGUsIGRlY3JlYXNpbmcgPSBGQUxTRSkKc2FtcGxlCgoKIyBMb29wIHRocm91Z2ggdmFyaWFibGUKZm9yIChpIGluIHNlcV9hbG9uZyhzYW1wbGUpKXsKICBwcmludChpKQogIGRmX3N1YiA8LSBjZ19kZiAlPiUKICAgIGZpbHRlcihjZ19pZCA9PSBzYW1wbGVbaV0pICU+JQogICAgIG11dGF0ZSh0dW1vcl9kZXNjcmlwdG9yID0gZmFjdG9yKHR1bW9yX2Rlc2NyaXB0b3IpLAogICAgICAgICB0dW1vcl9kZXNjcmlwdG9yID0gZmN0X3JlbGV2ZWwodHVtb3JfZGVzY3JpcHRvciwgdGltZXBvaW50c19vcmRlcl9hYmJyZXYpLAogICAgICAgICBWYXJpYW50X0NsYXNzaWZpY2F0aW9uID0gZmFjdG9yKFZhcmlhbnRfQ2xhc3NpZmljYXRpb24pLAogICAgICAgICBWYXJpYW50X0NsYXNzaWZpY2F0aW9uID0gZmN0X3JlbGV2ZWwoVmFyaWFudF9DbGFzc2lmaWNhdGlvbiwgdmFyaWFudHNfb3JkZXIpKSAlPiUgCiAgICBhcnJhbmdlKHR1bW9yX2Rlc2NyaXB0b3IsIFZhcmlhbnRfQ2xhc3NpZmljYXRpb24pCgogIGlmIChpICVpbiUgYygyLCA3LCAxNSwgMTgpKXsKICAgIHdpZHRoX3ZhbHVlID0gMjUKICAgIH1lbHNlIGlmIChpICVpbiUgYygxMCwgMTYpKXsKICAgIHdpZHRoX3ZhbHVlID0gMzYKICAgIH1lbHNlewogICAgd2lkdGhfdmFsdWUgPSAxMAogICAgICB9CgogICMgRGVmaW5lIHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uCiAgeF92YWx1ZSA8LSBkZl9zdWIkdGRfbXNfcGxvdF9ncm91cAogIHRpdGxlIDwtIHBhc3RlKHNhbXBsZVtpXSwgIlZhcmlhbnRzIGFjcm9zcyBzYW1wbGVzIiwgc2VwID0gIjogIikKICByb3dzX3ZhbHVlIDwtIDEKICAKICAjIFJ1biBmdW5jdGlvbgogIGZuYW1lIDwtIHBhc3RlMChraWRzX21vbGVjdWxhcl9zdWJ0eXBlX1BMX3Bsb3RzX2RpciwgIi8iLCBzYW1wbGVbaV0sICJfQWx0ZXJhdGlvbl90eXBlX3RpbWVwb2ludHNfa2lkc19iYXJwbG90c19QTC5wZGYiKQogIHByaW50KGZuYW1lKQogIHAgPC0gY3JlYXRlX3N0YWNrZWRfYmFycGxvdF92YXJpYW50X2tpZHMoZGYgPSBkZl9zdWIsIHggPSB4X3ZhbHVlLCBwYWxldHRlID0gcGFsZXR0ZSwgdGl0bGUgPSB0aXRsZSwgcm93cyA9IHJvd3NfdmFsdWUpCiAgcGRmKGZpbGUgPSBmbmFtZSwgd2lkdGggPSB3aWR0aF92YWx1ZSwgaGVpZ2h0ID0gNikKICBwcmludChwKQogIGRldi5vZmYoKQogIH0KCmBgYAoKIyMgUEwgY29ob3J0IHdpdGhvdXQgbW9sZWN1bGFyIHN1YnR5cGUKCmBgYHtyIHBsb3QtY2ctaWQta2lkcy1QTCwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA2LCBmaWcuZnVsbHdpZHRoID0gVFJVRX0KY2dfZGYgPC0gUExfY291bnRfZGYgJT4lCiAgIyBGaXggc3ludGF4IGluIGNhbmNlciBncm91cHMgbmFtZXMgCiAgbXV0YXRlKGNnX2lkID0gc3RyX3JlcGxhY2VfYWxsKGNnX2lkLCAiICIsICJfIikpCgpzYW1wbGUgPC0gYXMuY2hhcmFjdGVyKHVuaXF1ZShjZ19kZiRjZ19pZCkpIApzYW1wbGUgPC0gc29ydChzYW1wbGUsIGRlY3JlYXNpbmcgPSBGQUxTRSkKc2FtcGxlCgoKIyBMb29wIHRocm91Z2ggdmFyaWFibGUKZm9yIChpIGluIHNlcV9hbG9uZyhzYW1wbGUpKXsKICBwcmludChpKQogIGRmX3N1YiA8LSBjZ19kZiAlPiUKICAgIGZpbHRlcihjZ19pZCA9PSBzYW1wbGVbaV0pIAoKICBpZiAoaSAlaW4lIGMoMiwgNywgMTUsIDE4KSl7CiAgICB3aWR0aF92YWx1ZSA9IDI1CiAgICB9ZWxzZSBpZiAoaSAlaW4lIGMoMTAsIDE2KSl7CiAgICB3aWR0aF92YWx1ZSA9IDI4CiAgICB9ZWxzZXsKICAgIHdpZHRoX3ZhbHVlID0gMTAKICAgICAgfQoKICAjIERlZmluZSBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbgogIHhfdmFsdWUgPC0gZGZfc3ViJHRkX21zX3Bsb3RfZ3JvdXBfbgogIHRpdGxlIDwtIHBhc3RlKHNhbXBsZVtpXSwgIlZhcmlhbnRzIGFjcm9zcyBzYW1wbGVzIiwgc2VwID0gIjogIikKICByb3dzIDwtIDEKICAKICAjIFJ1biBmdW5jdGlvbgogIGZuYW1lIDwtIHBhc3RlMChraWRzX1BMX3Bsb3RzX2RpciwgIi8iLCBzYW1wbGVbaV0sICJfQWx0ZXJhdGlvbl90eXBlX3RpbWVwb2ludHNfa2lkc19iYXJwbG90c19QTC5wZGYiKQogIHByaW50KGZuYW1lKQogIHAgPC0gY3JlYXRlX3N0YWNrZWRfYmFycGxvdF92YXJpYW50X2tpZHMoZGYgPSBkZl9zdWIsIHggPSB4X3ZhbHVlLCBwYWxldHRlID0gcGFsZXR0ZSwgdGl0bGUgPSB0aXRsZSwgcm93cyA9IHJvd3MpCiAgcGRmKGZpbGUgPSBmbmFtZSwgd2lkdGggPSB3aWR0aF92YWx1ZSwgaGVpZ2h0ID0gNikKICBwcmludChwKQogIGRldi5vZmYoKQogIH0KCmBgYAoKYGBge3IgZWNobz1UUlVFfQpzZXNzaW9uSW5mbygpCmBgYAo=